package com.forever7776.life.core.mapper.sys;

import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.mapper.BaseMapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.forever7776.life.core.common.vo.SysUserSearchVO;
import com.forever7776.life.core.common.vo.UserBaseInfoVO;
import com.forever7776.life.core.entity.sys.SysUser;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;

/**
 * <p>
 * 平台用户表 Mapper 接口
 * </p>
 *
 * @author kz
 * @since 2018-01-18
 */
public interface SysUserMapper extends BaseMapper<SysUser> {

    /**
     * 更新用户登录时间
     *
     * @param username
     * @return
     */
    @Update("update sys_user set login_time=now() where username=#{username}")
    int updateLoginTime(@Param("username") String username);

    /**
     * 更新用户登出时间
     *
     * @param username
     * @return
     */
    @Update("update sys_user set logout_time=now() where username=#{username}")
    int updateLogoutTime(@Param("username") String username);

    /**
     * 批量修改用户状态
     *
     * @param ids
     * @param status
     * @return
     */
    int batchSysUserStatus(@Param("ids") JSONArray ids, @Param("status") Integer status);

    /**
     * 单个更新用户的状态
     *
     * @param id
     * @param status
     * @return
     */
    @Update("update sys_user set status=#{status} where id=#{id}")
    int updateSysUserStatus(@Param("id") String id, @Param("status") Integer status);

    /**
     * 根据条件查询用户
     *
     * @param page
     * @param searchVO
     * @return
     */
    List<SysUser> selectUsersByCondition(@Param("page") Page<SysUser> page, @Param("vo") SysUserSearchVO searchVO);

    /**
     * 根据时间类型查询注册用户量
     *
     * @param type
     * @return
     */
    Integer selectRegisterCountByTimeType(@Param("type") String type);

    /**
     * 根据时间类型查询登录用数据
     *
     * @param type
     * @return
     */
    Integer selectLoginCountByTimeType(@Param("type") String type);


    /**
     * 根据用户登录名查询用户ID
     *
     * @param username
     * @return
     */
    @Select("select id from sys_user where username=#{username}")
    String selectUserIdByUsername(@Param("username") String username);

    /**
     * 修改密码
     *
     * @param userId
     * @param newPwd
     * @param newSat
     * @return
     */
    @Update("update sys_user set password=#{newPwd},salt=#{newSat} where id=#{userId}")
    Integer cpwd(@Param("userId") String userId, @Param("newPwd") String newPwd, @Param("newSat") String newSat);

    /**
     * 查看用户数据，先从redis中获取，如果没有则从数据库中查询
     *
     * @param userId
     * @return
     */
    @Select("select id userId,username ,nickname,headimg from sys_user where id =#{userId}")
    UserBaseInfoVO selectUserBaseInfoById(@Param("userId") String userId);

    List<UserBaseInfoVO> selectUserBaseInfos(@Param("userIds") List<String> userIds);
}